﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;
namespace Presentation
{
    public partial class QLBangDiemMonHoc : Form
    {
        DataTable bang,bangmon,banglop,banghs,hocky;
        string malop;
        private void SetHocKy()
        {
            hocky = new DataTable();
            DataColumn ten = new DataColumn("Học Kỳ", typeof(string));
            DataColumn giatri = new DataColumn("Mã HK", typeof(int));
            hocky.Columns.Add(ten);
            hocky.Columns.Add(giatri);
            DataRow giatri1 = hocky.NewRow();
            giatri1[0] = "Học Kỳ I";
            giatri1[1] = 1;
            hocky.Rows.Add(giatri1);
            DataRow giatri2 = hocky.NewRow();
            giatri2[0] = "Học Kỳ II";
            giatri2[1] = 2;
            hocky.Rows.Add(giatri2);
        }
        private void LayHocKy()
        {
            SetHocKy();
            comboBox_hocky.DataSource = hocky;
            comboBox_hocky.DisplayMember = "Học Kỳ";
            comboBox_hocky.ValueMember = "Mã HK";
        }
        public QLBangDiemMonHoc()
        {
            InitializeComponent();
        }

        private void button_thoat_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
        private bool KTGiaTri(string chuoi)
        {
            if (String.IsNullOrEmpty(chuoi))
            {
                return true;
            }
            else
            {
                for (int i = 0; i < chuoi.Length; i++)
                {
                    if (char.IsDigit(chuoi[i]) == false)
                    {
                        return true;
                    }
                }
            }
            return false;
        }
        private void QLBangDiemMonHoc_Load(object sender, EventArgs e)
        {

            LayHocKy();
            LayDSDiem();
            LayDSMon();
            LayDSLop();
            malop = comboBox_lop.SelectedValue.ToString().Trim();
            LayDSHSCuaLop();
            label_chuy.Text = "Phải chọn một đối tượng\ntrong danh sách điểm\ntrước khi sửa hoặc xóa";
            
        }

        private void comboBox_hocky_SelectedIndexChanged(object sender, EventArgs e)
        {            
            LayDSMon();
            label_hkchon.Text = comboBox_hocky.Text;
        }
        private void LayDSDiem()
        {
            bang = BUSBangDiem.LayDSDiem();
            dataGridView_dsdiem.DataSource = bang;
            dataGridView_dsdiem.Columns[0].HeaderText = "ID";
            dataGridView_dsdiem.Columns[0].Width = 30;
            dataGridView_dsdiem.Columns[1].HeaderText = "Học Kỳ";
            dataGridView_dsdiem.Columns[1].Width = 100;
            dataGridView_dsdiem.Columns[2].HeaderText = "Mã Lớp";
            dataGridView_dsdiem.Columns[2].Width = 100;
            dataGridView_dsdiem.Columns[3].HeaderText = "Mã Môn";
            dataGridView_dsdiem.Columns[3].Width = 100;
            dataGridView_dsdiem.Columns[4].HeaderText = "Mã HS";
            dataGridView_dsdiem.Columns[4].Width = 100;
            dataGridView_dsdiem.Columns[5].HeaderText = "Điểm 15\'";
            dataGridView_dsdiem.Columns[5].Width = 100;
            dataGridView_dsdiem.Columns[6].HeaderText = "Điểm 45\'";
            dataGridView_dsdiem.Columns[6].Width = 100;
            dataGridView_dsdiem.Columns[7].HeaderText = "Điểm Cuối Kỳ";
            dataGridView_dsdiem.Columns[7].Width = 128;
        }
        private void LayDSMon()
        {
            var hk = comboBox_hocky.SelectedValue.ToString();
            bangmon = BUSBangDiem.LayDSMon(hk);
            comboBox_mon.DataSource = bangmon;
            comboBox_mon.DisplayMember = "TenMonHoc";
            comboBox_mon.ValueMember = "MaMonHoc";
            
        }
        private void LayDSLop()
        {
            banglop = BUSBangDiem.LayDSLop();
            comboBox_lop.DataSource = banglop;
            comboBox_lop.DisplayMember = "TenLop";
            comboBox_lop.ValueMember = "MaLop";
        }
        private void LayDSHSCuaLop()
        {
            
            banghs = BUSBangDiem.LayDSHSCuaLop(malop);
            dataGridView_dshs.DataSource = banghs;
            dataGridView_dshs.Columns[0].HeaderText = "Mã Số";
            dataGridView_dshs.Columns[0].Width = 80;
            dataGridView_dshs.Columns[1].HeaderText = "Tên HS";
            dataGridView_dshs.Columns[1].Width = 130;
        }
        private void comboBox_mon_SelectedIndexChanged(object sender, EventArgs e)
        {
            label_monchon.Text = comboBox_mon.Text;
        }

        private void comboBox_lop_SelectedIndexChanged(object sender, EventArgs e)
        {
            label_lopchon.Text = comboBox_lop.Text;
            malop = comboBox_lop.SelectedValue.ToString().Trim();
            LayDSHSCuaLop();
        }

        private void dataGridView_dshs_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            
        }

        private void button_them_Click(object sender, EventArgs e)
        {
            if (dataGridView_dshs.Rows.Count < 0)
            {
                MessageBox.Show("Vui lòng chọn học sinh","Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (KTGiaTri(textBox_diem15.Text) == true || KTGiaTri(textBox_diem45.Text) == true || KTGiaTri(textBox_cuoihk.Text) == true)
            {
                MessageBox.Show("Vui lòng kiểm tra lại thông tin về điểm\nĐiểm không được để trống và phải là số", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            else
            {
                DTOBangDiem diem = new DTOBangDiem();
                int index_hs = dataGridView_dshs.CurrentCell.RowIndex;
                diem.HocKy = int.Parse(comboBox_hocky.SelectedValue.ToString().Trim());
                diem.MaLop = comboBox_lop.SelectedValue.ToString().Trim();
                diem.MaMon = comboBox_mon.SelectedValue.ToString().Trim();
                diem.MaHS = int.Parse(dataGridView_dshs.Rows[index_hs].Cells[0].Value.ToString().Trim());
                for (int x = 0; x < dataGridView_dsdiem.RowCount; x++)
                {
                    if (diem.HocKy == int.Parse(dataGridView_dsdiem.Rows[x].Cells[1].Value.ToString().Trim()) && diem.MaMon == dataGridView_dsdiem.Rows[x].Cells[3].Value.ToString().Trim() && diem.MaHS == int.Parse(dataGridView_dsdiem.Rows[x].Cells[4].Value.ToString().Trim()))
                    {
                        MessageBox.Show("Điểm cho môn học của học sinh đã có, xin kiểm tra lại", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }
                diem.Diem15phut = int.Parse(textBox_diem15.Text);
                diem.Diem45phut = int.Parse(textBox_diem45.Text);
                diem.DiemCuoiHK = int.Parse(textBox_cuoihk.Text);
                if (BUSBangDiem.ThemDiem(diem) == 0)
                {
                    MessageBox.Show("Không thêm được điểm, có lỗi về hệ thống", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    LayDSDiem();
                }
            }
        }

        private void button_xoa_Click(object sender, EventArgs e)
        {
            if (dataGridView_dsdiem.Rows.Count <= 0)
            {
                MessageBox.Show("Phải chọn một bảng điểm trước khi xóa.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            else
            {
                DialogResult result = MessageBox.Show("Bạn thật sự muốn xóa bảng điểm của học sinh này?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    int ma = 0;
                    for (int i = 0; i < dataGridView_dsdiem.Rows.Count; i++)
                    {
                        ma = int.Parse(dataGridView_dsdiem.Rows[i].Cells[0].Value.ToString());
                    }
                    if (ma > 0)
                    {
                        if (BUSBangDiem.XoaDiem(ma) == 0)
                        {
                            MessageBox.Show("Không thể thực hiện hành động này\nCó lỗi hệ thống.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        else LayDSDiem();
                    }
                }
            }
        }
        private int LayChiSoRowHS(DataGridView ds, string value)
        {
            for (int i = 0; i < ds.Rows.Count; i++)
            {
                if (value == ds.Rows[i].Cells[0].Value.ToString())
                {
                    return i;
                }
            }
            return -1;
        }
        private void dataGridView_dsdiem_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            
        }

        private void button_sua_Click(object sender, EventArgs e)
        {
            var diem15p = float.Parse(textBox_diem15.Text);
            var diem45p = float.Parse(textBox_diem45.Text);
            var diemhk = float.Parse(textBox_cuoihk.Text);
            if (KTGiaTri(textBox_diem15.Text) == true || KTGiaTri(textBox_diem45.Text) == true || KTGiaTri(textBox_cuoihk.Text) == true)
            {
                MessageBox.Show("Vui lòng kiểm tra lại thông tin về điểm\nĐiểm không được để trống và phải là số", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (diem15p > 10 || diem45p > 10 || diemhk > 10 || diem15p < 0 || diem45p < 0 || diemhk < 0)
            {
                MessageBox.Show("Điểm phải từ 0 đến 10", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            int index = dataGridView_dshs.CurrentCell.RowIndex;
            DTOBangDiem diem = new DTOBangDiem();
            diem.HocKy = int.Parse(comboBox_hocky.SelectedValue.ToString().Trim());
            diem.MaLop = comboBox_lop.SelectedValue.ToString().Trim();
            diem.MaMon = comboBox_mon.SelectedValue.ToString().Trim();
            diem.MaHS = int.Parse(dataGridView_dshs.Rows[index].Cells[0].Value.ToString().Trim());
            diem.Diem15phut = int.Parse(textBox_diem15.Text);
            diem.Diem45phut = int.Parse(textBox_diem45.Text);
            diem.DiemCuoiHK = int.Parse(textBox_cuoihk.Text);               
            if (BUSBangDiem.SuaDiem(diem) == 0)
            {
                MessageBox.Show("Không sửa được điểm, có lỗi về hệ thống", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            else LayDSDiem();           
        }

        private void dataGridView_dshs_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int index = dataGridView_dshs.CurrentCell.RowIndex;
            label_hschon.Text = dataGridView_dshs.Rows[index].Cells[1].Value.ToString().Trim();
            var mshs = (int)dataGridView_dshs.CurrentRow.Cells[0].Value;
            var mamon = comboBox_mon.SelectedValue.ToString();
            var malop = (int)comboBox_lop.SelectedValue;
            var bangdiem = BUSBangDiem.LayDiem(mshs,mamon,malop);
            textBox_diem15.Text = bangdiem.Diem15phut.ToString();
            textBox_diem45.Text = bangdiem.Diem45phut.ToString();
            textBox_cuoihk.Text = bangdiem.DiemCuoiHK.ToString();
        }

        private void dataGridView_dsdiem_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int indexs = dataGridView_dsdiem.CurrentCell.RowIndex;
            comboBox_mon.SelectedValue = dataGridView_dsdiem.Rows[indexs].Cells[3].Value;
            comboBox_hocky.SelectedValue = dataGridView_dsdiem.Rows[indexs].Cells[1].Value;
            comboBox_lop.SelectedValue = dataGridView_dsdiem.Rows[indexs].Cells[2].Value;
            int indexofhs = LayChiSoRowHS(dataGridView_dshs, dataGridView_dsdiem.Rows[indexs].Cells[4].Value.ToString());
            dataGridView_dshs.CurrentCell = dataGridView_dshs.Rows[indexofhs].Cells[0]; //set gia tri cell hien tai = gia tri trong datagrid dsdiem.
            label_hschon.Text = dataGridView_dshs.Rows[indexofhs].Cells[1].Value.ToString();
            textBox_diem15.Text = dataGridView_dsdiem.Rows[indexs].Cells[5].Value.ToString();
            textBox_diem45.Text = dataGridView_dsdiem.Rows[indexs].Cells[6].Value.ToString();
            textBox_cuoihk.Text = dataGridView_dsdiem.Rows[indexs].Cells[7].Value.ToString();
        }

    }
}
